home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / examples / randomtest.c < prev    next >
C/C++ Source or Header  |  2001-05-12  |  1KB  |  64 lines

  1.  
  2. /*
  3. **    tek/examples/randomtest.c
  4. **    random quality test
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <math.h>
  9. #include <tek/exec.h>
  10.  
  11. #define NUMSEED        10000
  12. #define NUMRAND        1000
  13. #define NUMSLOT        100
  14.  
  15. int main(int argc, char **argv)
  16. {
  17.     TAPTR basetask = TCreateTask(TNULL, TNULL, TNULL);
  18.     if (basetask)
  19.     {
  20.         TINT *slots = TTaskAlloc0(basetask, 4 * 65536);
  21.         if (slots)
  22.         {
  23.             TTIME t1, t2;
  24.             TUINT i, j;
  25.             TINT seed;
  26.             TDOUBLE d, deviation = 0;
  27.  
  28.             printf("getting %d random numbers each from %d seed values\n", NUMRAND, NUMSEED);
  29.             fflush(NULL);
  30.             
  31.             TTimeQuery(basetask, &t1);
  32.             
  33.             for (i = 0; i < NUMSEED; ++i)
  34.             {
  35.                 seed = TGetRandomSeed(basetask);
  36.                 for (j = 0; j < NUMRAND; ++j)
  37.                 {
  38.                     seed = TGetRandom(seed);
  39.                     slots[seed%NUMSLOT]++;
  40.                 }
  41.             }
  42.  
  43.             TTimeQuery(basetask, &t2);
  44.             
  45.             printf("all done. time elapsed: %.4fs\n", TTIMETOF(&t2)-TTIMETOF(&t1));
  46.             fflush(NULL);
  47.             
  48.             for (i = 0; i < NUMSLOT; ++i)
  49.             {
  50.                 d = (TDOUBLE) NUMRAND / (TDOUBLE) NUMSLOT * (TDOUBLE) NUMSEED - (TDOUBLE) slots[i];
  51.                 deviation += sqrt(d * d);
  52.             }
  53.             
  54.             printf("deviation from perfect randomness: %.5f\n", (TFLOAT) deviation / (TFLOAT) NUMSLOT);
  55.             fflush(NULL);
  56.  
  57.             TTaskFree(basetask, slots);            
  58.         }
  59.         TDestroy(basetask);
  60.     }
  61.     
  62.     return 0;
  63. }
  64.